
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Semi-fuzz(Fuzz) testing &#8212; Universal Ctags 0.3.0 documentation</title>
    <link rel="stylesheet" href="_static/classic.css" type="text/css" />
    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    './',
        VERSION:     '0.3.0',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true,
        SOURCELINK_SUFFIX: '.txt'
      };
    </script>
    <script type="text/javascript" src="_static/jquery.js"></script>
    <script type="text/javascript" src="_static/underscore.js"></script>
    <script type="text/javascript" src="_static/doctools.js"></script>
    <link rel="index" title="Index" href="genindex.html" />
    <link rel="search" title="Search" href="search.html" />
    <link rel="next" title="Noise testing" href="noise.html" />
    <link rel="prev" title="Units test facility" href="units.html" /> 
  </head>
  <body>
    <div class="related" role="navigation" aria-label="related navigation">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="noise.html" title="Noise testing"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="units.html" title="Units test facility"
             accesskey="P">previous</a> |</li>
        <li class="nav-item nav-item-0"><a href="index.html">Universal Ctags 0.3.0 documentation</a> &#187;</li>
          <li class="nav-item nav-item-1"><a href="testing.html" accesskey="U">Testing ctags</a> &#187;</li> 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body" role="main">
            
  <div class="section" id="semi-fuzz-fuzz-testing">
<h1>Semi-fuzz(<em>Fuzz</em>) testing<a class="headerlink" href="#semi-fuzz-fuzz-testing" title="Permalink to this headline">¶</a></h1>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Maintainer:</th><td class="field-body">Masatake YAMATO &lt;<a class="reference external" href="mailto:yamato&#37;&#52;&#48;redhat&#46;com">yamato<span>&#64;</span>redhat<span>&#46;</span>com</a>&gt;</td>
</tr>
</tbody>
</table>
<hr class="docutils" />
<p>Unexpected input can lead ctags to enter an infinite loop. The fuzz
target tries to identify these conditions by passing
semi-random (semi-broken) input to ctags.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ make fuzz LANGUAGES=LANG1[,LANG2,...]
</pre></div>
</div>
<p>With this command line, ctags is run for random variations of all test
inputs under <em>Units/*/input.*</em> of languages defined by <code class="docutils literal"><span class="pre">LANGUAGES</span></code>
macro variable. In this target, the output of ctags is ignored and
only the exit status is analyzed. The ctags binary is also run under
timeout command, such that if an infinite loop is found it will exit
with a non-zero status. The timeout will be reported as following:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">timeout</span> <span class="n">C</span><span class="p">]</span>                <span class="n">Units</span><span class="o">/</span><span class="n">test</span><span class="o">.</span><span class="n">vhd</span><span class="o">.</span><span class="n">t</span><span class="o">/</span><span class="nb">input</span><span class="o">.</span><span class="n">vhd</span>
</pre></div>
</div>
<p>This means that if C parser doesn’t stop within N seconds when
<em>Units/test.vhd.t/input.vhd</em> is given as an input, timeout will
interrupt ctags. The default duration can be changed using
<code class="docutils literal"><span class="pre">TIMEOUT=N</span></code> argument in <em>make</em> command. If there is no timeout but
the exit status is non-zero, the target reports it as following:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">unexpected</span><span class="o">-</span><span class="n">status</span><span class="p">(</span><span class="n">N</span><span class="p">)</span> <span class="n">C</span><span class="p">]</span>                <span class="n">Units</span><span class="o">/</span><span class="n">test</span><span class="o">.</span><span class="n">vhd</span><span class="o">.</span><span class="n">t</span><span class="o">/</span><span class="nb">input</span><span class="o">.</span><span class="n">vhd</span>
</pre></div>
</div>
<p>The list of parsers which can be used as a value for <code class="docutils literal"><span class="pre">LANGUAGES</span></code> can
be obtained with following command line</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ ./ctags --list-languages
</pre></div>
</div>
<p>Besides <code class="docutils literal"><span class="pre">LANGUAGES</span></code> and <code class="docutils literal"><span class="pre">TIMEOUT</span></code>, fuzz target also takes the
following parameters:</p>
<blockquote>
<div><p><code class="docutils literal"><span class="pre">VG=1</span></code></p>
<blockquote>
<div><p>Run ctags under valgrind. If valgrind finds a memory
error it is reported as:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">valgrind</span><span class="o">-</span><span class="n">error</span> <span class="n">Verilog</span><span class="p">]</span>                <span class="n">Units</span><span class="o">/</span><span class="n">array_spec</span><span class="o">.</span><span class="n">f90</span><span class="o">.</span><span class="n">t</span><span class="o">/</span><span class="nb">input</span><span class="o">.</span><span class="n">f90</span>
</pre></div>
</div>
<p>The valgrind report is recorded at
<code class="docutils literal"><span class="pre">Units/\*/VALGRIND-${language}.tmp</span></code>.</p>
</div></blockquote>
</div></blockquote>
<p>As the same as units target, this semi-fuzz test target also calls
<em>misc/units shrink</em> when a test case is failed. See “<em>Units</em> test facility”
about the shrunk result.</p>
</div>


          </div>
        </div>
      </div>
      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
        <div class="sphinxsidebarwrapper">
  <h4>Previous topic</h4>
  <p class="topless"><a href="units.html"
                        title="previous chapter"><em>Units</em> test facility</a></p>
  <h4>Next topic</h4>
  <p class="topless"><a href="noise.html"
                        title="next chapter"><em>Noise</em> testing</a></p>
<div id="searchbox" style="display: none" role="search">
  <h3>Quick search</h3>
    <form class="search" action="search.html" method="get">
      <div><input type="text" name="q" /></div>
      <div><input type="submit" value="Go" /></div>
      <input type="hidden" name="check_keywords" value="yes" />
      <input type="hidden" name="area" value="default" />
    </form>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related" role="navigation" aria-label="related navigation">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="noise.html" title="Noise testing"
             >next</a> |</li>
        <li class="right" >
          <a href="units.html" title="Units test facility"
             >previous</a> |</li>
        <li class="nav-item nav-item-0"><a href="index.html">Universal Ctags 0.3.0 documentation</a> &#187;</li>
          <li class="nav-item nav-item-1"><a href="testing.html" >Testing ctags</a> &#187;</li> 
      </ul>
    </div>
    <div class="footer" role="contentinfo">
        &#169; Copyright 2015, Universal Ctags Team.
      Last updated on 19 Dec 2017.
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.4.
    </div>
  </body>
</html>